import axios from 'axios'
import {Toast, Dialog} from 'vant';

import store from '@/store'
import router from '../router'

// 根据环境不同引入不同api地址
import {baseApi} from '@/config';

import {getUUID} from './uuid_token';


// console.log('***不同环境的api地址*****', baseApi)


// create an axios instance
const service = axios.create({
  baseURL: baseApi, // url = base api url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 90000 // request timeout
})



// request请求拦截器
service.interceptors.request.use(
  config => {
    // 若config中没有hideloading, 则开启loading
    if (!config.hideloading) {
      // loading
      Toast.loading({
        forbidClick: true
      })
    }
    let allCertificate = JSON.parse(localStorage.getItem('allCertificate'));
    let userTempId = getUUID();
    // console.log('临时token', userTempId);
    if (allCertificate) {
      config.headers['Authorization'] = allCertificate.access_token
    }
    if(userTempId){
      // todo: 再加一个: 请求头添加一个字段(userTempId), 需要和后端商定
      config.headers.userTempId = userTempId;
    }
    return config
  },
  error => {
    Toast('请求异常, 请重试')
    return Promise.reject(error)
  }
)




// respone响应拦截器
service.interceptors.response.use(
  response => {
    // 得到响应后，清除loading状态
    // console.log('响应---respone响应拦截器', response)
    const res = response.data;
    Toast.clear();
    if (res.code && res.code === 200) {
      // Toast.clear();
      return Promise.resolve(res)
    } else {
      // Toast(res.msg ||`status为200, 但code为：${res.code}`);
      Toast(res.msg || '系统异常');
      return Promise.reject(res);
    }
  },
  error => {
    // console.log('出错啦：', error.response);
    // console.log('出错啦--状态码：', error.response.status);
    // console.log('出错啦：--错误信息', error.response.data)
    Toast.clear();
    if (error && error.response) {
      // 后端返回的提示
      Toast(error.response.data.msg);
      // 错误码
      let errStatus = error.response.status;
      // 后端返回的提示
      Toast(`错误码：${errStatus}，提示：${error.response.data.msg}`);
      switch (errStatus) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          if(this.$route.path!='/welcome'){
            router.replace({
              path: '/login',
              query: {
                redirect: router.currentRoute.fullPath
              }
            });
          }
          break;

        // 402: token过期, 登录超时, 需重新登录
        case 402:
          // 退出登录
          store.commit('LOGOUT');
          // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
          window.timeOutId = setTimeout(() => {
            router.replace({
              path: '/login',
              query: {
                redirect: router.currentRoute.fullPath
              }
            });
          }, 1000);
          clearTimeout(window.timeOutId)
          break;
        case 404:
          Toast.fail('当前接口不存在，请联系管理员！');
          break;
        default:
          Toast('后台服务器异常！');
      }
    }
    // 将错误结果进行reject()拦截(必须要)
    return Promise.reject(error)
  }
)

export default service
